package com.hyt.it.ogt.kq.service.gov.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hyt.it.ogt.kq.common.gov.utils.GovPage;
import com.hyt.it.ogt.kq.service.gov.model.dto.CandidateInfoGceResultDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.CandidateInfoObtResultDTO;
import com.hyt.it.ogt.kq.service.gov.model.dto.ticket.CandidateInfoDTO;
import com.hyt.it.ogt.kq.service.gov.model.excel.ImportTaskCandidateSheet;
import com.hyt.it.ogt.kq.service.gov.model.param.CandidatePageParam;
import com.hyt.it.ogt.kq.service.gov.model.param.CandidateParam;
import com.hyt.it.ogt.kq.service.gov.model.param.arrange.*;
import com.hyt.it.ogt.kq.service.gov.model.vo.CandidatePageVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.PlaceRoomVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.arrange.*;
import com.hyt.it.ogt.kq.service.gov.schedule.model.Candidate;
import com.hyt.it.ogt.kq.service.gov.schedule.model.ExamRoom;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 考生表 Mapper 接口
 * </p>
 *
 * @author huangyh
 * @since 2021-03-08
 */
public interface ArrangeMapper {

    Page<ArrangeResultBySubjectVO> searchArrangeResultBySubject(Page<ArrangeResultBySubjectVO> page,
            ArrangeResultBySubjectParam param);

    Page<ArrangeResultByCandidateVO> searchArrangeResultByCandidate(Page<ArrangeResultByCandidateVO> page,
            ArrangeResultByCandidateParam param);

    List<ArrangeResultDetailByTimeVO> getArrangeResultDetailByTime(String taskId, String timeId, int type);

    List<Candidate> getArrangeCandidateList(String taskId, String subjectId, Integer arrangeRule);

    List<ExamRoom> getExamRoomList(String taskId, int arrangeRule);

    GovPage<PlaceRoomVO> getChangeRoom(GovPage<PlaceRoomVO> page, SearchChangeRoomParam param);

    Integer checkCandidateSubjectTime(String taskId);

    Page<ArrangeResultByTimeVO> searchArrangeResultByTime(Page<ArrangeResultByTimeVO> page, ArrangeResultByTimeParam param);

    Integer arrangeRoomCount(String taskId, Set<String> deptIds);

    int countArrangedRoomNum(String taskId, Set<String> deptIds);

    Page<ArrangeResultByRoomVO> searchArrangeResultByRoom(Page<ArrangeResultByRoomVO> page, ArrangeResultByRoomParam param);

    List<ExportArrangeResultVO> exportArrangeResultByCandidate(String taskId);

}
